unit DuplicataReceberFrDM;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ZDataset, ZSqlUpdate, ZSequence, MainDM, QueryConditions, DB;

type

  { TDuplicataReceberFrData }

  TDuplicataReceberFrData = class(TMainDataModule)
    DuplicataReceberDatasource: TDatasource;
    DuplicataReceberZQuery: TZQuery;
    AuxiliarZQuery: TZQuery;
    DuplicataReceberZQueryacrescimo: TFloatField;
    DuplicataReceberZQuerydata_pagamento: TDateField;
    DuplicataReceberZQuerydata_vencimento: TDateField;
    DuplicataReceberZQuerydesconto: TFloatField;
    DuplicataReceberZQueryid_cliente: TLargeintField;
    DuplicataReceberZQueryid_conta: TLargeintField;
    DuplicataReceberZQueryid_duplicata_receber: TLargeintField;
    DuplicataReceberZQueryid_venda: TLargeintField;
    DuplicataReceberZQuerynome_pessoa: TStringField;
    DuplicataReceberZQuerynota: TStringField;
    DuplicataReceberZQueryparcela: TLargeintField;
    DuplicataReceberZQuerysigla_forma_pagamento: TStringField;
    DuplicataReceberZQuerystatus: TStringField;
    DuplicataReceberZQueryvalor: TFloatField;
    DuplicataReceberZQueryvalor_pago: TFloatField;
    VendaCaixaZQuerydesconto: TFloatField;
    VendaCaixaZQueryid_caixa: TLargeintField;
    VendaCaixaZQueryid_venda: TLargeintField;
    VendaCaixaZQuerysigla_forma_pagamento: TStringField;
    VendaCaixaZQuerytipo_cartao: TStringField;
    VendaCaixaZQueryvalor: TFloatField;
    procedure DataModuleCreate(Sender: TObject);
    /// Abre o DataSet
    procedure OpenDataSet(); override;
    /// Fecha o DataSet
    procedure CloseDataSet(); override;
    /// Realiza busca
    /// @param(Condicoes são as condições para a busca)
    /// @param(Tabela é a tabela no banco de dados)
    function BuscaDuplicata(IdDuplicata: integer; Parcela: integer): boolean;
    function BuscaData(): string;
    procedure BuscaDuplicatasTodas();
    procedure BuscaDuplicatasAtrasadas();
    procedure BuscaDuplicatasQuitadas();
    procedure BuscaDuplicatasCanceladas();
    procedure BuscaDuplicatasAVencer();
    procedure BuscaDuplicataData(Data: string);
    procedure BuscarDuplicataCliente(Cliente: string);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  DuplicataReceberFrData: TDuplicataReceberFrData;

implementation

uses ConnectionDM;

{ TDuplicataReceberFrData }


procedure TDuplicataReceberFrData.DataModuleCreate(Sender: TObject);
begin
  MainDataSet := DuplicataReceberZQuery;
end;

procedure TDuplicataReceberFrData.OpenDataSet;
begin
  ConnectionData.EmptyQuery(DuplicataReceberZQuery, 'duplicata_receber');
end;

procedure TDuplicataReceberFrData.CloseDataSet;
begin
  DuplicataReceberZQuery.Close();
end;


function TDuplicataReceberFrData.BuscaDuplicata(IdDuplicata: integer;
  Parcela: integer): boolean;
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dp.* FROM duplicata_receber as dp, pessoa as p ');
    SQL.Add('WHERE dp.id_duplicata_receber=:id_duplicata_receber AND dp.parcela=:parcela AND dp.id_cliente = p.id_pessoa');
    ParamByName('id_duplicata_receber').AsInteger := IdDuplicata;
    ParamByName('parcela').AsInteger := Parcela;
    Open();
    if RecordCount > 0 then begin
      Result := True;
    end else begin
      Result := False;
    end;
  end;
end;

function TDuplicataReceberFrData.BuscaData(): string;
var
  Data: string;
begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT current_date as date');
    Open();
    Data := FieldByName('date').AsString;
    Result := Data;
  end;
end;

procedure TDuplicataReceberFrData.BuscaDuplicatasTodas();
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p');
    SQL.Add('WHERE dr.id_cliente=p.id_pessoa');
    Open();
  end;
end;

procedure TDuplicataReceberFrData.BuscaDuplicatasAtrasadas();
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p, cliente as c');
    SQL.Add('WHERE dr.id_cliente=c.id_cliente and p.id_pessoa=c.id_cliente');
    SQL.Add('AND data_vencimento<current_date');
    SQL.Add('AND status <>:statusQ AND status <>:statusC');
    ParamByName('statusQ').AsString := 'Q';
    ParamByName('statusC').AsString := 'C';
    Open();
  end;
end;

procedure TDuplicataReceberFrData.BuscaDuplicatasQuitadas();
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p, cliente as c');
    SQL.Add('WHERE dr.id_cliente=c.id_cliente and p.id_pessoa=c.id_cliente');
    SQL.Add('AND status = :status');
    ParamByName('status').AsString := 'Q';
    Open();
  end;
end;

procedure TDuplicataReceberFrData.BuscaDuplicatasCanceladas();
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p, cliente as c');
    SQL.Add('WHERE dr.id_cliente=c.id_cliente and p.id_pessoa=c.id_cliente');
    SQL.Add('AND status = :status');
    ParamByName('status').AsString := 'C';
    Open();
  end;
end;

procedure TDuplicataReceberFrData.BuscaDuplicatasAVencer();
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p, cliente as c');
    SQL.Add('WHERE dr.id_cliente=c.id_cliente and p.id_pessoa=c.id_cliente');
    SQL.Add('AND status <>:statusQ AND status <>:statusC');
    ParamByName('statusQ').AsString := 'Q';
    ParamByName('statusC').AsString := 'C';
    Open();
  end;
end;

procedure TDuplicataReceberFrData.BuscaDuplicataData(Data: string);
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p, cliente as c');
    SQL.Add('WHERE dr.id_cliente=c.id_cliente and p.id_pessoa=c.id_cliente');
    SQL.Add('AND data_vencimento=:data');
    ParamByName('data').AsString := Data;
    Open();
  end;
end;

procedure TDuplicataReceberFrData.BuscarDuplicataCliente(Cliente: string);
begin
  with DuplicataReceberZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dr.* FROM duplicata_receber as dr, pessoa as p, cliente as c');
    SQL.Add('WHERE dr.id_cliente=c.id_cliente and p.id_pessoa=c.id_cliente');
    SQL.Add('AND p.nome_pessoa LIKE :nome');
    ParamByName('nome').AsString := '%' + Cliente + '%';
    Open();
  end;
end;


initialization
  {$I duplicatareceberfrdm.lrs}

end.
